import * as bableParase from '@babel/core';
import traverse from '@babel/traverse';
import generate from '@babel/generator';
export default function autoAddOptionalChain() {
  return {
    name: 'auto-add-optional-chain',
    // enforce: 'pre', // 关键：确保在 @vitejs/plugin-vue 之前执行
    transform(code, id) {
      if (id.endsWith('.vue')) {
        const ast = bableParase.parse(code);
        console.log(ast, 'babelbabelbabelbabelbabel');

        traverse(ast, {
          MemberExpression: (path) => {
            // const { node } = path;
            // // 检查是否已经是可选链操作符
            // if (node.optional && node.object.name === 'obj') {
            //   console.log(node, 'nodenodenodenodenodenode');
            //   return;
            // }
            // // 检查是否是普通的属性访问（obj.prop 形式）
            // if (node.property && node.object && node.object.name === 'obj') {
            //   // 将普通属性访问转换为可选链访问
            //   node.optional = true;
            //   console.log(node, 'nodenodenodenodenodenode');
            // }
            // 判断当前成员表达式是否处于赋值的左侧（left）
            const isAssignmentLeft =
              path.parent.type === 'AssignmentExpression' && path.parent.left === path.node;

            // 如果不是赋值左侧，且是普通成员访问，则转换为可选链
            if (!isAssignmentLeft && path.node.type === 'MemberExpression') {
              path.replaceWith({
                type: 'OptionalMemberExpression',
                object: path.node.object,
                property: path.node.property,
                computed: path.node.computed,
                optional: true,
              });
            }
          },
        });
        // // 生成转换后的代码
        const output = generate(ast, {}, code);

        return {
          code: output.code,
        };
      }
    },
  };
}
